home *** CD-ROM | disk | FTP | other *** search
- ;LZW Depack routine for the JAM packer V4.0
- ;It is kept simple to minimise depack time.
-
- CLR.L -(A7)
- MOVE.W #$20,-(A7)
- TRAP #1
- ADDQ.L #6,A7
- MOVE.L D0,-(A7)
-
- MOVE.L #$80000,A0 ;start of packed data address
- MOVE.L #$90000,A1 ;depack to address
- BSR.S UNPACK
-
- MOVE.W #$20,-(A7)
- TRAP #1
- ADDQ.L #6,A7
- RTS
-
- UNPACK:
- MOVE.W $FFFF8240.W,-(A7)
- MOVE.L A0,A4
- MOVE.L A1,A6
- ADDA.L 8(A0),A4
- ADDA.L 4(A0),A6
- MOVE.L A6,A5 ;KEEP COPY TO CHECK AGAINST
- MOVE.L 4(A0),D4
- MOVE.B #$20,D3
-
- MOVE.W #$0FED,D5
- MOVEA.L A6,A3 ;KEEP ADDR OF END OF SPACES
-
- MOVEQ #$00,D7 ;START UNPACK ROUTINE
- TOPDEP: DBF D7,NOTUSED
- MOVE.B -(A4),D6 ;GET COMMAND BYTE
- MOVEQ #$07,D7
- NOTUSED:
- LSR.B #1,D6
- BCC.S COPY ;BIT NOT SET, COPY FROM UNPACKED AREA
- MOVE.B -(A4),-(A6) ;COPY BYTES FROM PACKED AREA
- ADDQ.W #1,D5
- SUBQ.L #1,D4
- BGT.S TOPDEP
- BRA.S EXITUP
- COPY: MOVE.B -2(A4),D0
- LSL.W #4,D0
- MOVE.B -(A4),D0
- MOVE.W D0,$FFFF8240.W
- SUB.W D5,D0
- NEG.W D0
- AND.W #$0FFF,D0
- LEA 1(A6,D0.W),A0
- MOVEQ #$0F,D1
- AND.B -(A4),D1
- ADDQ.W #2,D1
- MOVEQ #$01,D0
- ADD.W D1,D0
- CMPA.L A5,A0
- BGT.S SPACES
-
- WRITE: MOVE.B -(A0),-(A6)
- DBF D1,WRITE
- BACK: ADD.L D0,D5
- SUB.L D0,D4
- BGT.S TOPDEP
- EXITUP: MOVE.W (A7)+,$FFFF8240.W
- RTS
-
- SPACES: CMPA.L A5,A0
- BLE.S WRITE
- MOVE.B D3,-(A6) ;COPY OUT SPACES
- SUBQ.L #1,A0
- DBF D1,SPACES
- BRA.S BACK
-